package com.sinsoft.monitorDemo.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import redis.clients.jedis.Jedis;

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.sinsoft.monitorDemo.entity.TomcatInfo;
import com.sinsoft.monitorDemo.util.JsonUtil;
import com.sinsoft.monitorDemo.util.RedisUtil;

public class TomcatInfoDao {
	/**
	 * 通过IP的到Tomcat信息
	 * @param ip
	 * @param index
	 * @return
	 */
	public List<TomcatInfo> getTomcatInfoList(String ip, String code){
		Jedis jedis = RedisUtil.getJedis();
		List<String> jsonList = jedis.lrange("StatusData_" + ip + "_TOMCAT_" + code + "_latest", 0, -1);
		JsonArray jsonArray = null;
		JsonArray jsonPortStatus = null;
		Map<String, String> portStatus = new HashMap<String, String>();
		JsonObject jsonObject = null;
		TomcatInfo tomcatInfo = null;
		List<TomcatInfo> tomcatInfoList = new ArrayList<TomcatInfo>();
		if (jsonList.size()>10) {
			for (int i = jsonList.size()-10; i < jsonList.size(); i++) {
				portStatus.clear();
				jsonArray = JsonUtil.JsonParse(jsonList.get(i));
				jsonObject = jsonArray.get(0).getAsJsonObject();
				jsonPortStatus = (JsonArray)jsonObject.get("port_status");
				for(int j = 0; j<jsonPortStatus.size(); j++){
					JsonArray jsonPortStatu = (JsonArray)jsonPortStatus.get(j);
					portStatus.put(jsonPortStatu.get(0).getAsString(), jsonPortStatu.get(1).getAsString());
				}
				tomcatInfo = new TomcatInfo(jsonObject.get("cpu_used_per").getAsDouble(), jsonObject.get("mem_used_per").getAsDouble(), 
						jsonObject.get("status").getAsString(), jsonObject.get("port_sum").getAsInt(), portStatus, 
						jsonObject.get("max_connections").getAsInt(), jsonObject.get("connections").getAsInt(), jsonArray.get(1).getAsLong());
				tomcatInfoList.add(tomcatInfo);		
			}		
		} else {
			for (int i = 1; i < jsonList.size(); i++) {
				portStatus.clear();
				jsonArray = JsonUtil.JsonParse(jsonList.get(i));
				jsonObject = jsonArray.get(0).getAsJsonObject();
				jsonPortStatus = (JsonArray)jsonObject.get("port_status");
				for(int j = 0; j<jsonPortStatus.size(); j++){
					JsonArray jsonPortStatu = (JsonArray)jsonPortStatus.get(j);
					portStatus.put(jsonPortStatu.get(0).getAsString(), jsonPortStatu.get(1).getAsString());
				}
				tomcatInfo = new TomcatInfo(jsonObject.get("cpu_used_per").getAsDouble(), jsonObject.get("mem_used_per").getAsDouble(), 
						jsonObject.get("status").getAsString(), jsonObject.get("port_sum").getAsInt(), portStatus, 
						jsonObject.get("max_connections").getAsInt(), jsonObject.get("connections").getAsInt(), jsonArray.get(1).getAsLong());
				tomcatInfoList.add(tomcatInfo);		
			}	
		}
		jedis.close();
		return tomcatInfoList;		
	}
	
	/**
	 * 得到最新的Tomcat信息
	 * @param ip
	 * @return
	 */
	public TomcatInfo getNewTomcatInfo(String ip, String code){
		Jedis jedis = RedisUtil.getJedis();
		TomcatInfo tomcatInfo;
		try {
			List<String> jsonList = jedis.lrange("StatusData_" + ip + "_TOMCAT_"+ code +"_latest", -1, -1);
				JsonArray jsonArray = JsonUtil.JsonParse(jsonList.get(0));
				JsonObject jsonObject = jsonArray.get(0).getAsJsonObject();
				JsonArray jsonPortStatus = (JsonArray)jsonObject.get("port_status");
				Map<String, String> portStatus = new HashMap<String, String>();
				for(int j = 0; j<jsonPortStatus.size(); j++){
					JsonArray jsonPortStatu = (JsonArray)jsonPortStatus.get(j);
					portStatus.put(jsonPortStatu.get(0).getAsString(), jsonPortStatu.get(1).getAsString());
				}
				tomcatInfo = new TomcatInfo(jsonObject.get("cpu_used_per").getAsDouble(), jsonObject.get("mem_used_per").getAsDouble(), 
						jsonObject.get("status").getAsString(), jsonObject.get("port_sum").getAsInt(), portStatus, 
						jsonObject.get("max_connections").getAsInt(), jsonObject.get("connections").getAsInt(), jsonArray.get(1).getAsLong());
		} catch (Exception e) {
			return new TomcatInfo(null, null, null, null, null, null, null, null);
		}finally{	
			jedis.close();
		}
			return tomcatInfo;		
	}
}
